<?php
namespace app\core;
use app\core\App;

/**
 * 配置管理类
 */
class Config {
    /**
     * @var array 存储已加载的配置数组
     */
    private static $configurations = [];

    /**
     * 获取配置项的值或整个配置数组
     *
     * 此方法用于从指定的配置文件中获取一个配置项的值。如果未指定$key，则返回整个配置文件的数组。
     * 如果配置文件尚未加载，它会首先尝试从预定的配置目录加载该文件。
     *
     * @param string $fileName 配置文件名（不含扩展名），假设位于项目的config目录下
     * @param string|null $key 配置项的键名。如果为空，则返回整个配置数组。
     * @param mixed $default 如果指定的配置项不存在，则返回此默认值。
     * @return mixed 返回配置项的值，或当$key为空时返回整个配置数组。如果文件不存在，则返回$default值。
     */
    public static function get($fileName, $key = null, $default = null) {
        if (!isset(self::$configurations[$fileName])) {
            // 尝试加载配置文件
            $filePath = __DIR__ . "/../../config/{$fileName}.php"; // 假设配置文件都在项目的config目录下
            if (file_exists($filePath)) {
                self::$configurations[$fileName] = require $filePath;
            } else {
                // 如果文件不存在，返回默认值
                return $default;
            }
        }

        // 如果$key为空，则返回整个配置数组
        if ($key === null) {
            return self::$configurations[$fileName];
        }

        // 获取配置项的值
        if (array_key_exists($key, self::$configurations[$fileName])) {
            return self::$configurations[$fileName][$key];
        }

        return $default;
    }
}
